import Vue from 'vue'
// 封装请求
import theaxios from 'axios'
// 引入NProgress
import nProgress from 'nprogress'
// 引入NProgress样式
import 'nprogress/nprogress.css'
import { signRequest } from '@/utils/CryptoJS'

import { Notify } from 'vant'

// 全局注册
Vue.use(Notify)

const axios = theaxios.create({
  baseURL: '/api',
  timeout: 30000 // 发送请求超过5秒自动失败
})

// 设置请求拦截器，再发起请求的实惠价，展示进度条
axios.interceptors.request.use(function (config) {
  // 获取请求头参数
  const { timestamp, nonce, signature } = signRequest(JSON.stringify(config.data))
  // 分别将签名、密钥、时间戳 至请求头
  if (signature) config.headers.signature = signature
  if (nonce) config.headers.nonce = nonce
  if (timestamp) config.headers.timestamp = timestamp
  // console.log(config)

  nProgress.start()
  return config
}, function (error) {
  return Promise.reject(error)
})

// 设置响应拦截器，在请求结束时，关闭进度条
axios.interceptors.response.use(function (response) {
  // console.log('555', response)
  if (response.status !== 200) {
    Notify({ type: 'danger', message: '机器人消息错误' })
    nProgress.done()
  }
  nProgress.done()
  return response
}, async function (error) {
  return Promise.reject(error)
})

// 暴露出一个函数  为了通用
export default ({ url, method = 'GET', data = {}, params = {}, headers = {} }) => {
  // 返回axios
  return axios({
    url,
    method,
    data,
    params,
    headers
  })
}
